home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / mig / RCS / Mig.man,v < prev    next >
Text File  |  1990-06-22  |  15KB  |  410 lines

  1. head     2.0;
  2. branch   ;
  3. access   ;
  4. symbols  no-auto-remigrate:2.0 installed:2.0;
  5. locks    ; strict;
  6. comment  @@;
  7.  
  8.  
  9. 2.0
  10. date     90.03.10.13.13.11;  author douglis;  state Stable;
  11. branches ;
  12. next     1.2;
  13.  
  14. 1.2
  15. date     90.02.28.11.00.30;  author douglis;  state Exp;
  16. branches ;
  17. next     1.1;
  18.  
  19. 1.1
  20. date     90.02.16.14.41.56;  author douglis;  state Exp;
  21. branches ;
  22. next     ;
  23.  
  24.  
  25. desc
  26. @man page for migration library
  27. @
  28.  
  29.  
  30. 2.0
  31. log
  32. @Changing version numbers.
  33. @
  34. text
  35. @\fB'\" $Header: /sprite/src/lib/c/mig/RCS/Mig.man,v 1.2 90/02/28 11:00:30 douglis Exp Locker: douglis $ SPRITE (Berkeley)
  36. .so \*(]ltmac.sprite
  37. .HS Mig lib
  38. .BS
  39. .SH NAME
  40. Mig \- obtain or update information in the migration information database.
  41. .SH SYNOPSIS
  42. .nf
  43. \fB#include    <mig.h>\fR
  44.  
  45. Mig_Info *
  46. \fBMig_GetInfo\fR(\fIspriteID\fP)
  47.  
  48. int
  49. \fBMig_GetAllInfo\fR(\fIinfoArray, numHosts\fP)
  50.  
  51. int
  52. \fBMig_RequestIdleHosts\fR(\fInumHosts, priority, flags, callBackPtr, hostArray\fP)
  53.  
  54. int
  55. \fBMig_ConfirmIdle\fR(\fIspriteID\fP)
  56.  
  57. int
  58. \fBMig_ReturnHosts\fR(\fInumHosts, hostArray\fP)
  59.  
  60. int
  61. \fBMig_DeleteHost\fR(\fIspriteID\fP)
  62.  
  63. int
  64. \fBMig_Evict\fR()
  65.  
  66. char *
  67. \fBMig_GetPdevName\fR(\fIglobal\fP)
  68.  
  69. int
  70. \fBMig_GetIdleNode\fR()
  71.  
  72. int
  73. \fBMig_Done\fR(\fIspriteID\fP)
  74.  
  75. .SH ARGUMENTS
  76. .AS void (*callBackPtr)() in
  77. .AP int spriteID in
  78. The Sprite ID of the host for which information should be obtained or updated.
  79. .AP Mig_Info infoArray[] out
  80. A buffer to hold Mig_Info entries returned by the Mig_GetAllInfo routine.
  81. The size of the buffer is specified in the \fInumHosts\fP variable.
  82. .AP int numHosts in
  83. The number of Mig_Info structures contained in \fIinfoArray\fP.
  84. Or, the number of hosts requested from \fBMig_RequestIdleHosts\fR and
  85. the number of hosts returned to \fBMig_ReturnIdle\fR.  
  86. .AP int priority in
  87. Priority of processes to be migrated to idle hosts (see below).  
  88. .AP int flags in
  89. Flags to be passed to the migration daemon (see below).
  90. .AP void (*callBackPtr)() in
  91. Routine to call if not enough hosts are available and
  92. additional hosts are later available.
  93. .AP int global in
  94. Whether to return the name of the pseudo-device for the global daemon
  95. or host-specific daemon.
  96. .BE
  97. .SH DESCRIPTION
  98. These functions are used to obtain (or update) information about hosts on the 
  99. Sprite network.  There are routines to get information about specific
  100. hosts or all the hosts on the network, to select one or more idle hosts for
  101. process migration, to cause processes to be evicted, or to remove
  102. hosts that are down from the list of hosts on the network.  
  103. .PP
  104. Most of the routines interact with a single network-wide daemon, known
  105. as the \fIglobal daemon\fP, to obtain information or make requests.
  106. This \fBmigd\fP daemon maintains state about all hosts on the network,
  107. including their load averages, idle time, and availability for use
  108. with migration.   In addition, each host runs a per-host instance of
  109. \fBmigd\fR that samples load and evicts processes automatically when
  110. it detects user input.    The \fBMig\fR library opens a pseudo-device
  111. to communicate with the appropriate \fBmigd\fR daemon (global or
  112. local) depending on the operation being performed.  Also, if an error
  113. occurs communicating with a daemon, the \fBMig\fR library
  114. reestablishes communication.
  115. .SH GETTING HOST INFORMATION
  116. The migration daemon, and the migration library, communicate using a
  117. structure defined in mig.h, known  as a Mig_Info structure.  
  118. Each host has a Mig_Info structure associated with it.  The structure
  119. has another structure included within it; the Mig_LoadVector is
  120. updated periodically by the \fBmigd\fR process on each host.  The rest
  121. of the data in a Mig_Info structure are established at boot-time or are
  122. maintained by the global daemon.  
  123. .PP
  124. The global daemon maintains the state of each host.  The states are
  125. defined in mig.h.  The most important ones are MIG_HOST_DOWN, which
  126. indicates that the rest of the Mig_Info structure is irrelevant with
  127. the exception of loadVec.timestamp, which indicates when the host was
  128. last up; MIG_HOST_IDLE, indicating that a host is available for
  129. migration; MIG_HOST_FULL, which shows that the host is accepting
  130. migration but already has foreign processes; and MIG_HOST_ACTIVE,
  131. which indicates that a user is actively using the machine or the
  132. machine's load is too high to permit foreign processes.
  133. .PP
  134. The load vector includes weighted
  135. average CPU utilizations and ready-queue lengths, as well as the time since
  136. input was last received from users directly logged into the machine.  (Remote
  137. logins do not affect idle time.)  Finally, each entry indicates whether the
  138. host is willing to accept processes for migration.   \fBmigd\fR 
  139. is responsible for determining whether migration
  140. is allowed, based on factors such as load and idle time.  
  141. .PP
  142. \fBMig_GetInfo()\fR returns a pointer to a Mig_Info structure based on the sprite 
  143. ID of a host. 
  144. The structure is statically allocated by Mig_GetInfo, and the contents of
  145. the structure may change on subsequent calls to Mig_GetInfo.  On
  146. error, a NULL pointer is returned.
  147. .PP
  148. \fBMig_GetAllInfo()\fR returns an array of Mig_Info structures.  The array
  149. must be allocated by the caller, and a pointer to the array must be
  150. passed to \fBMig_GetAllInfo()\fR, along with the size of the array.  The
  151. number of entries filled in \fiinfoArray\fP is returned.  On error, -1
  152. is returned and the global variable \fIerrno\fP indicates the nature
  153. of the error.  
  154. .PP
  155. .SH GETTING IDLE HOSTS
  156. The global daemon maintains open connections to both per-host
  157. \fBmigd\fR daemons and user processes that are using idle hosts.  User
  158. processes can request idle hosts using any of three priorities,
  159. MIG_LOW_PRIORITY, MIG_NORMAL_PRIORITY, and MIG_HIGH_PRIORITY.
  160. MIG_LOW_PRIORITY is for long-running background processes that are to
  161. be run at low execution priority.  MIG_NORMAL_PRIORITY is for normal,
  162. relatively short-lived processes such as compiles.  MIG_HIGH_PRIORITY
  163. is not yet in general use.  Hosts with foreign processes of one
  164. priority can still accept more processes of higher priority, so
  165. simulations won't interfere with compiles.
  166. .PP
  167. Processes communicate with the global daemon using ioctls, and
  168. normally, those streams are
  169. not readable. 
  170. The global daemon makes the streams readable to indicate that a change
  171. of state has occurred.  The \fBMig\fR library 
  172. relies on \fBselect()\fR to determine whether the global daemon has
  173. information about changes.  In this way, communication with the daemon
  174. may be minimized, since applications can check for new idle hosts or
  175. evictions on hosts they were using, without ever communicating with
  176. the daemon. 
  177. .PP
  178. \fBMig_RequestIdleHosts()\fR requests one or more idle hosts from the
  179. global daemon.   The number of hosts available is returned.  The
  180. \fIpriority\fR must be specified as one of the priorities listed
  181. above.  The \fIflags\fR may be 0 or MIG_PROC_AGENT, which indicates
  182. that the process requesting the host will not indicate when the
  183. processes being migrated are through, and instead the hosts to which
  184. the processes are migrated should monitor foreign processes and note
  185. when they are no longer in use for migration.   The \fIcallBackPtr\fR
  186. may be NULL or a pointer to a void function that will be invoked when
  187. additional hosts are available, if an insufficient number of hosts are
  188. granted by the global daemon at the time of the call.  \fIhostArray\fR
  189. points to an area that can hold up to \fInumHosts\fR host identifiers.
  190. .PP
  191. \fBMig_ConfirmIdle(\fIhostID\fB)\fR verifies that a host is still
  192. available.  If 
  193. the host is available, 
  194. \fBMig_ConfirmIdle()\fR returns 1 (TRUE).  If the host is not
  195. available, or an error occurs, \fBMig_ConfirmIdle()\fR returns 0 (FALSE).
  196. In this case, the caller may request a new idle host.  
  197. .PP
  198. \fBMig_ReturnHosts()\fR returns one or more idle hosts to the pool.
  199. Note: all hosts requested by a process are returned to the pool of
  200. idle hosts when the stream that connects the process to the global
  201. daemon is closed (i.e., when the process and all its children that may
  202. have inherited the stream have exited).  
  203. .SH BACKWARD COMPATIBILITY
  204. Two functions are implemented to provide a backward compatible
  205. interface for users of the original \fBMig\fR library.  
  206. .PP
  207. \fBMig_GetIdleNode()\fR returns the number of an idle node.  If no host is
  208. available, then 0 is returned.  On error, -1
  209. is returned and the global variable \fIerrno\fP indicates the nature
  210. of the error.  
  211. .PP
  212. \fBMig_Done()\fR returns a single host to the pool of idle hosts.
  213. .SH MISCELLANEOUS
  214. .PP
  215. \fBMig_DeleteHost()\fR removes a host from the database maintained by
  216. the global daemon.  The host must be down at the time.  This may be used
  217. if a host is removed from the network or renamed.
  218. .PP
  219. \fBMig_Evict()\fR performs an \fIioctl\fP to the local \fBmigd\fR
  220. daemon, requesting that it evict any foreign processes.  Normally,
  221. eviction is automatic when a host becomes active after being idle.
  222. This routine provides the \fBloadavg\fP program with the ability to
  223. request evictions at other times (for example, from a remote login).
  224. .PP
  225. \fBMig_GetPdevName()\fR is used by the migration library and by
  226. \fBmigd\fR to get the name of pseudo-devices to open.  It would not
  227. normally be used by other programs.
  228. .SH DIAGNOSTICS
  229. Most \fBMig\fR routines
  230. return zero if 
  231. all went well.  Otherwise 
  232. they return -1 and the \fIerrno\fR variable contains additional information
  233. about what error occurred.  \fBMig_GetIdleNode()\fR  and
  234. \fBMig_RequestIdleHosts()\fR   similarly return -1 on 
  235. error, but they return 0 if no idle host is available.  \fBMig_GetInfo()\fR
  236. returns
  237. NULL on error. 
  238. .SH FILES
  239. .IP /sprite/admin/migd.log
  240. The global migration daemon error log.  
  241. .IP /hosts/$HOST/migd.log
  242. The error log used by host $HOST.
  243. .IP /sprite/admin/migInfo.pdev
  244. The pseudo-device used to communicate with the global daemon.
  245. .IP /hosts/$HOST/migInfo.pdev
  246. The pseudo-device used to communicate with the local daemon.
  247. .IP /sprite/admin/migd.check
  248. The file used to store the most recent information about host uptimes.
  249. .SH KEYWORDS
  250. migration, load average, idle time, pseudo-device, eviction
  251. .SH SEE ALSO
  252. migd, loadavg, pmake, pdev
  253. @
  254.  
  255.  
  256. 1.2
  257. log
  258. @documented new library.
  259. @
  260. text
  261. @d1 1
  262. a1 1
  263. \fB'\" $Header: /sprite/src/lib/c/mig/RCS/Mig.man,v 1.1 90/02/16 14:41:56 douglis Exp Locker: douglis $ SPRITE (Berkeley)
  264. @
  265.  
  266.  
  267. 1.1
  268. log
  269. @Initial revision
  270. @
  271. text
  272. @d1 1
  273. a1 1
  274. \fB'\" $Header: /sprite/src/lib/c/mig/RCS/Mig.man,v 1.3 89/07/19 15:59:19 douglis Exp $ SPRITE (Berkeley)
  275. a9 1
  276. \fB#include    <db.h>\fR
  277. d15 1
  278. a15 1
  279. \fBMig_GetAllInfo\fR(\fIinfoArray, numEntries\fP)
  280. d18 1
  281. a18 1
  282. \fBMig_GetIdleNode\fR()
  283. d24 10
  284. a33 1
  285. \fBMig_Done\fR(\fIspriteID\fP)
  286. d36 1
  287. a36 1
  288. \fBMig_OpenInfo\fR(\fIfileType, writing, handlePtr\fP)
  289. d38 2
  290. a39 2
  291. int 
  292. \fBMig_UpdateInfo\fR(\fIhostID, infoPtr, handlePtr\fP)
  293. d42 1
  294. a42 1
  295. .AS Mig_FileType fileType 
  296. d47 2
  297. a48 2
  298. The size of the buffer is specified in the \fInumEntries\fP variable.
  299. .AP int numEntries in
  300. d50 12
  301. a61 8
  302. .AP Mig_FileType fileType in
  303. A specification for which database file to access, the global one (\fBMIG_SHARED\fR)
  304. or the host-specific one (\fBMIG_PRIVATE\fR).
  305. .AP int writing in
  306. If non-zero, then the database file is opened for writing; otherwise,
  307. reading.
  308. .AP Db_Handle *handlePtr out
  309. A pointer to a "database handle".
  310. d66 3
  311. a68 4
  312. hosts or all the hosts on the network, or to select an idle host for
  313. process migration.  There is also a routine to update the information
  314. for a host.  (In order to update the database, a routine to open the
  315. database file and obtain a handle for the database must be called first.)
  316. d70 31
  317. a100 4
  318. Each host maintains its own entry in a common database, and it also maintains 
  319. the same information in a separate file, one per host.  The entries are 
  320. ASCII text and are therefore machine-independent.  The entries are manipulated
  321. using routines from the \fBMig_\fR library.  Each entry includes weighted
  322. d104 2
  323. a105 2
  324. host is willing to accept processes for migration.  The user-level program
  325. that updates the database is responsible for determining whether migration
  326. a107 18
  327. The \fBMig_\fR library converts between the ASCII representation stored in the
  328. database and an internal C structure, known as a Mig_Info structure.
  329. A Mig_Info structure is defined as follows:
  330. .DS L
  331. .ta 4n 2.5c 6.5c
  332. \fBtypedef struct\fR {
  333.     \fBint\fR    \fIhostID\fR;        /* host for which info valid */
  334.     \fBint\fR    \fIutils\fR[MIG_NUM_LOAD_VALUES];
  335.                         /* avg utilizations (percent) */
  336.     \fBdouble\fR \fIlengths\fR[MIG_NUM_LOAD_VALUES];
  337.                         /* avg ready-queue lengths */
  338.     \fBint\fR    \fIbootTime\fR;        /* when host last rebooted  */
  339.     \fBint\fR    \fItimestamp\fR;        /* when info last updated */
  340.     \fBint\fR    \fInoInput\fR;        /* time since last input */
  341.     \fBint\fR    \fIallowMigration\fR;    /* host allowing migration? */
  342. } Mig_Info;
  343. .DE
  344. .PP
  345. d121 52
  346. d176 1
  347. a176 2
  348. of the error.  The host is marked in the migration database to indicate
  349. that it is being used.
  350. d178 2
  351. a179 6
  352. \fBMig_ConfirmIdle()\fR verifies that a host is still available
  353. without actually locking the database file.  If the host is available,
  354. \fBMig_ConfirmIdle()\fR returns 1 (TRUE).  If the host is not
  355. available, or an error occurs, \fBMig_ConfirmIdle()\fR returns 0 (FALSE).
  356. In this case, the caller may request a new idle host from
  357. \fBMig_GetIdleNode()\fR. 
  358. d181 9
  359. a189 24
  360. \fBMig_Done()\fR releases a host returned by \fBMig_GetIdleNode()\fR
  361. and returns it to the pool of idle hosts.  It is the responsibility of
  362. the process calling \fBMig_GetIdleNode()\fR to release the host when
  363. it is no longer needed.  (If the host is not made available with the
  364. \fBMig_Done()\fR call, then the migration daemon on that host will
  365. eventually make the host available if it detects that no foreign
  366. processes are executing on it.)
  367. .PP
  368. \fBMig_OpenInfo()\fR is used to open a migration database file for long-term
  369. access.  (By comparison, the preceding  functions open and close the
  370. database files each time they are called.)  There are two types of
  371. file, shared and private.  The shared file is typically not cacheable,
  372. since it is updated simultaneously by multiple hosts.  The private
  373. file is typically accessed by only the host for which the information
  374. is being kept, and it is suitable for host-specific tools such as load
  375. average widgets.  To access the shared file, Mig_OpenInfo is called
  376. with Mig_FileType \fBMIG_SHARED\fR; to access the local file, it is called
  377. with \fBMIG_PRIVATE\fR.  If the file is to be opened for writing, then the
  378. \fIwriting\fP argument must be non-zero.  (Typically, only the system
  379. program that updates the database should open the database for
  380. writing.)  Mig_OpenInfo returns a database handle in \fI*handlePtr\fP;
  381. this handle must be passed to Mig_UpdateInfo to update the migration
  382. database.  \fIHandlePtr\fP must be allocated by the caller prior to
  383. calling \fBMig_OpenInfo\fR.
  384. d191 3
  385. a193 4
  386. \fBMig_UpdateInfo()\fR takes a \fIhostID\fP and Mig_Info structure
  387. \fI*infoPtr\fP, and writes it 
  388. to the database file referenced by \fI*handlePtr\fP.  The hostID is
  389. used to specify which record in the database to update.  
  390. d195 2
  391. a196 1
  392. \fBMig_GetAllInfo()\fR, \fBMig_OpenInfo()\fR, and \fBMig_UpdateInfo()\fR return zero if
  393. d199 3
  394. a201 2
  395. about what error occurred.  \fBMig_GetIdleNode()\fR similarly returns -1 on
  396. error, but it returns 0 if no idle host is available.  \fBMig_GetInfo()\fR
  397. d205 10
  398. a214 4
  399. .IP /sprite/admin/data/migInfo
  400. The global migration database file.
  401. .IP /hosts/$HOST/migInfo
  402. The migration database file used by host $HOST.
  403. d216 1
  404. a216 1
  405. migration, load average, idle time, sprite ID
  406. d218 1
  407. a218 1
  408. xload, loadavg, pmake, db
  409. @
  410.